@sync-in/server 1.8.1 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (605) hide show
  1. package/CHANGELOG.md +57 -11
  2. package/environment/environment.dist.yaml +29 -26
  3. package/package.json +15 -15
  4. package/server/app.constants.js +9 -0
  5. package/server/app.constants.js.map +1 -1
  6. package/server/app.functions.js +42 -0
  7. package/server/app.functions.js.map +1 -0
  8. package/server/app.module.js +4 -0
  9. package/server/app.module.js.map +1 -1
  10. package/server/applications/admin/admin.module.js +6 -1
  11. package/server/applications/admin/admin.module.js.map +1 -1
  12. package/server/applications/{notifications/interfaces/user-mail-notification.js → admin/interfaces/check-update.interfaces.js} +1 -1
  13. package/server/applications/admin/interfaces/check-update.interfaces.js.map +1 -0
  14. package/server/applications/admin/services/admin-scheduler.service.js +53 -0
  15. package/server/applications/admin/services/admin-scheduler.service.js.map +1 -0
  16. package/server/applications/admin/services/admin.service.js +102 -0
  17. package/server/applications/admin/services/admin.service.js.map +1 -0
  18. package/server/applications/admin/services/admin.service.spec.js +46 -0
  19. package/server/applications/admin/services/admin.service.spec.js.map +1 -0
  20. package/server/applications/admin/utils/check-update.js +28 -0
  21. package/server/applications/admin/utils/check-update.js.map +1 -0
  22. package/server/applications/comments/services/comments-manager.service.js +1 -1
  23. package/server/applications/comments/services/comments-manager.service.js.map +1 -1
  24. package/server/applications/comments/services/comments-manager.service.spec.js +1 -1
  25. package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
  26. package/server/applications/comments/services/comments-queries.service.js.map +1 -1
  27. package/server/applications/files/constants/cache.js +10 -1
  28. package/server/applications/files/constants/cache.js.map +1 -1
  29. package/server/applications/files/constants/only-office.js +0 -25
  30. package/server/applications/files/constants/only-office.js.map +1 -1
  31. package/server/applications/files/constants/operations.js +20 -3
  32. package/server/applications/files/constants/operations.js.map +1 -1
  33. package/server/applications/files/dto/file-operations.dto.js +7 -0
  34. package/server/applications/files/dto/file-operations.dto.js.map +1 -1
  35. package/server/applications/files/files-only-office.controller.js +3 -2
  36. package/server/applications/files/files-only-office.controller.js.map +1 -1
  37. package/server/applications/files/files-only-office.controller.spec.js +6 -5
  38. package/server/applications/files/files-only-office.controller.spec.js.map +1 -1
  39. package/server/applications/files/files.controller.js +88 -8
  40. package/server/applications/files/files.controller.js.map +1 -1
  41. package/server/applications/files/files.controller.spec.js +11 -4
  42. package/server/applications/files/files.controller.spec.js.map +1 -1
  43. package/server/applications/files/guards/files-only-office.guard.js +6 -0
  44. package/server/applications/files/guards/files-only-office.guard.js.map +1 -1
  45. package/server/applications/files/interfaces/file-db-props.interface.js.map +1 -1
  46. package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
  47. package/server/applications/files/interfaces/only-office-config.interface.js.map +1 -1
  48. package/server/applications/files/services/files-content-manager.service.js +3 -3
  49. package/server/applications/files/services/files-content-manager.service.js.map +1 -1
  50. package/server/applications/files/services/files-lock-manager.service.js +61 -22
  51. package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
  52. package/server/applications/files/services/files-manager.service.js +122 -24
  53. package/server/applications/files/services/files-manager.service.js.map +1 -1
  54. package/server/applications/files/services/files-manager.service.spec.js +15 -0
  55. package/server/applications/files/services/files-manager.service.spec.js.map +1 -1
  56. package/server/applications/files/services/files-methods.service.js +38 -8
  57. package/server/applications/files/services/files-methods.service.js.map +1 -1
  58. package/server/applications/files/services/files-only-office-manager.service.js +12 -12
  59. package/server/applications/files/services/files-only-office-manager.service.js.map +1 -1
  60. package/server/applications/files/services/files-parser.service.js +1 -1
  61. package/server/applications/files/services/files-parser.service.js.map +1 -1
  62. package/server/applications/files/services/files-queries.service.js +10 -0
  63. package/server/applications/files/services/files-queries.service.js.map +1 -1
  64. package/server/applications/files/utils/files.js +1 -1
  65. package/server/applications/files/utils/files.js.map +1 -1
  66. package/server/applications/files/utils/send-file.js +3 -2
  67. package/server/applications/files/utils/send-file.js.map +1 -1
  68. package/server/applications/links/services/links-queries.service.js +1 -1
  69. package/server/applications/links/services/links-queries.service.js.map +1 -1
  70. package/server/applications/notifications/constants/notifications.js +5 -1
  71. package/server/applications/notifications/constants/notifications.js.map +1 -1
  72. package/server/applications/notifications/i18n/de.js +8 -2
  73. package/server/applications/notifications/i18n/de.js.map +1 -1
  74. package/server/applications/notifications/i18n/es.js +8 -2
  75. package/server/applications/notifications/i18n/es.js.map +1 -1
  76. package/server/applications/notifications/i18n/fr.js +8 -2
  77. package/server/applications/notifications/i18n/fr.js.map +1 -1
  78. package/server/applications/notifications/i18n/hi.js +8 -2
  79. package/server/applications/notifications/i18n/hi.js.map +1 -1
  80. package/server/applications/notifications/i18n/it.js +8 -2
  81. package/server/applications/notifications/i18n/it.js.map +1 -1
  82. package/server/applications/notifications/i18n/ja.js +8 -2
  83. package/server/applications/notifications/i18n/ja.js.map +1 -1
  84. package/server/applications/notifications/i18n/ko.js +8 -2
  85. package/server/applications/notifications/i18n/ko.js.map +1 -1
  86. package/server/applications/notifications/i18n/pl.js +8 -2
  87. package/server/applications/notifications/i18n/pl.js.map +1 -1
  88. package/server/applications/notifications/i18n/pt.js +8 -2
  89. package/server/applications/notifications/i18n/pt.js.map +1 -1
  90. package/server/applications/notifications/i18n/pt_br.js +8 -2
  91. package/server/applications/notifications/i18n/pt_br.js.map +1 -1
  92. package/server/applications/notifications/i18n/ru.js +8 -2
  93. package/server/applications/notifications/i18n/ru.js.map +1 -1
  94. package/server/applications/notifications/i18n/tr.js +8 -2
  95. package/server/applications/notifications/i18n/tr.js.map +1 -1
  96. package/server/applications/notifications/i18n/zh.js +8 -2
  97. package/server/applications/notifications/i18n/zh.js.map +1 -1
  98. package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
  99. package/server/applications/notifications/interfaces/user-mail-notification.interface.js +10 -0
  100. package/server/applications/notifications/interfaces/user-mail-notification.interface.js.map +1 -0
  101. package/server/applications/notifications/mails/models.js +38 -3
  102. package/server/applications/notifications/mails/models.js.map +1 -1
  103. package/server/applications/notifications/mails/templates.js +1 -1
  104. package/server/applications/notifications/mails/templates.js.map +1 -1
  105. package/server/applications/notifications/services/notifications-manager.service.js +8 -1
  106. package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
  107. package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
  108. package/server/applications/shares/services/shares-manager.service.js +17 -10
  109. package/server/applications/shares/services/shares-manager.service.js.map +1 -1
  110. package/server/applications/shares/services/shares-manager.service.spec.js +10 -3
  111. package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
  112. package/server/applications/shares/services/shares-queries.service.js +11 -1
  113. package/server/applications/shares/services/shares-queries.service.js.map +1 -1
  114. package/server/applications/spaces/guards/space.guard.spec.js +2 -2
  115. package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
  116. package/server/applications/spaces/services/spaces-browser.service.js +31 -11
  117. package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
  118. package/server/applications/spaces/services/spaces-manager.service.js +2 -2
  119. package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
  120. package/server/applications/spaces/services/spaces-queries.service.js +6 -2
  121. package/server/applications/spaces/services/spaces-queries.service.js.map +1 -1
  122. package/server/applications/spaces/utils/permissions.js +2 -2
  123. package/server/applications/spaces/utils/permissions.js.map +1 -1
  124. package/server/applications/sync/services/sync-manager.service.js +1 -0
  125. package/server/applications/sync/services/sync-manager.service.js.map +1 -1
  126. package/server/applications/sync/services/sync-paths-manager.service.js +1 -1
  127. package/server/applications/sync/services/sync-paths-manager.service.js.map +1 -1
  128. package/server/applications/sync/services/sync-paths-manager.service.spec.js +1 -1
  129. package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
  130. package/server/applications/users/constants/user.js +1 -1
  131. package/server/applications/users/constants/user.js.map +1 -1
  132. package/server/applications/users/services/admin-users-queries.service.js +8 -0
  133. package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
  134. package/server/applications/users/services/users-queries.service.js +67 -68
  135. package/server/applications/users/services/users-queries.service.js.map +1 -1
  136. package/server/applications/users/users.module.js +2 -1
  137. package/server/applications/users/users.module.js.map +1 -1
  138. package/server/applications/webdav/guards/webdav-protocol.guard.js +4 -4
  139. package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
  140. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +6 -6
  141. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
  142. package/server/applications/webdav/services/webdav-methods.service.js +3 -2
  143. package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
  144. package/server/applications/webdav/services/webdav-methods.service.spec.js +2 -2
  145. package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
  146. package/server/authentication/constants/auth-ldap.js +2 -0
  147. package/server/authentication/constants/auth-ldap.js.map +1 -1
  148. package/server/authentication/services/auth-methods/auth-method-ldap.service.js +34 -21
  149. package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +1 -1
  150. package/server/common/functions.js +0 -8
  151. package/server/common/functions.js.map +1 -1
  152. package/server/common/image.js +1 -0
  153. package/server/common/image.js.map +1 -1
  154. package/server/common/shared.js +18 -1
  155. package/server/common/shared.js.map +1 -1
  156. package/server/infrastructure/context/services/context-manager.service.js +3 -0
  157. package/server/infrastructure/context/services/context-manager.service.js.map +1 -1
  158. package/server/infrastructure/websocket/adapters/cluster.adapter.js +4 -4
  159. package/server/infrastructure/websocket/adapters/cluster.adapter.js.map +1 -1
  160. package/static/3rdpartylicenses.txt +1393 -44
  161. package/static/assets/favicon.svg +2 -25
  162. package/static/assets/logo-dark.svg +2 -32
  163. package/static/assets/logo.svg +2 -32
  164. package/static/assets/mimes/application-sql.svg +29 -1
  165. package/static/assets/mimes/application-x-sql.svg +29 -0
  166. package/static/assets/mimes/image-bmp.svg +12 -0
  167. package/static/assets/pdfjs/build/pdf.mjs +4869 -4454
  168. package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
  169. package/static/assets/pdfjs/build/pdf.sandbox.mjs +3 -3
  170. package/static/assets/pdfjs/build/pdf.sandbox.mjs.map +1 -1
  171. package/static/assets/pdfjs/build/pdf.worker.mjs +885 -596
  172. package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
  173. package/static/assets/pdfjs/version +1 -1
  174. package/static/assets/pdfjs/web/locale/be/viewer.ftl +40 -0
  175. package/static/assets/pdfjs/web/locale/bg/viewer.ftl +2 -0
  176. package/static/assets/pdfjs/web/locale/cs/viewer.ftl +41 -0
  177. package/static/assets/pdfjs/web/locale/cy/viewer.ftl +43 -0
  178. package/static/assets/pdfjs/web/locale/da/viewer.ftl +39 -0
  179. package/static/assets/pdfjs/web/locale/de/viewer.ftl +41 -0
  180. package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +43 -0
  181. package/static/assets/pdfjs/web/locale/el/viewer.ftl +39 -0
  182. package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +35 -0
  183. package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +41 -0
  184. package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +2 -2
  185. package/static/assets/pdfjs/web/locale/eo/viewer.ftl +39 -0
  186. package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +41 -0
  187. package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +39 -0
  188. package/static/assets/pdfjs/web/locale/es-ES/viewer.ftl +72 -0
  189. package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +120 -0
  190. package/static/assets/pdfjs/web/locale/eu/viewer.ftl +41 -0
  191. package/static/assets/pdfjs/web/locale/fi/viewer.ftl +41 -0
  192. package/static/assets/pdfjs/web/locale/fr/viewer.ftl +41 -0
  193. package/static/assets/pdfjs/web/locale/fur/viewer.ftl +77 -0
  194. package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +41 -0
  195. package/static/assets/pdfjs/web/locale/gn/viewer.ftl +39 -0
  196. package/static/assets/pdfjs/web/locale/he/viewer.ftl +41 -0
  197. package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +43 -0
  198. package/static/assets/pdfjs/web/locale/hu/viewer.ftl +41 -0
  199. package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +1 -1
  200. package/static/assets/pdfjs/web/locale/ia/viewer.ftl +41 -0
  201. package/static/assets/pdfjs/web/locale/it/viewer.ftl +41 -0
  202. package/static/assets/pdfjs/web/locale/ja/viewer.ftl +32 -0
  203. package/static/assets/pdfjs/web/locale/ka/viewer.ftl +41 -0
  204. package/static/assets/pdfjs/web/locale/kab/viewer.ftl +73 -0
  205. package/static/assets/pdfjs/web/locale/kk/viewer.ftl +21 -0
  206. package/static/assets/pdfjs/web/locale/ko/viewer.ftl +38 -1
  207. package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +39 -0
  208. package/static/assets/pdfjs/web/locale/nl/viewer.ftl +41 -0
  209. package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +37 -0
  210. package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +37 -0
  211. package/static/assets/pdfjs/web/locale/pl/viewer.ftl +39 -0
  212. package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +39 -0
  213. package/static/assets/pdfjs/web/locale/rm/viewer.ftl +73 -0
  214. package/static/assets/pdfjs/web/locale/ro/viewer.ftl +41 -0
  215. package/static/assets/pdfjs/web/locale/ru/viewer.ftl +42 -0
  216. package/static/assets/pdfjs/web/locale/sc/viewer.ftl +6 -0
  217. package/static/assets/pdfjs/web/locale/sk/viewer.ftl +43 -0
  218. package/static/assets/pdfjs/web/locale/sl/viewer.ftl +42 -1
  219. package/static/assets/pdfjs/web/locale/sq/viewer.ftl +77 -0
  220. package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +41 -0
  221. package/static/assets/pdfjs/web/locale/tg/viewer.ftl +39 -0
  222. package/static/assets/pdfjs/web/locale/th/viewer.ftl +35 -0
  223. package/static/assets/pdfjs/web/locale/tr/viewer.ftl +39 -0
  224. package/static/assets/pdfjs/web/locale/vi/viewer.ftl +42 -5
  225. package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +35 -0
  226. package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +37 -0
  227. package/static/assets/pdfjs/web/viewer.css +141 -110
  228. package/static/assets/pdfjs/web/viewer.html +7 -7
  229. package/static/assets/pdfjs/web/viewer.mjs +97 -14
  230. package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
  231. package/static/chunk-22DWHRCL.js +1 -0
  232. package/static/chunk-23UUFZSR.js +1 -0
  233. package/static/chunk-25QTY2GI.js +1 -0
  234. package/static/chunk-2E7IJZLL.js +1 -0
  235. package/static/chunk-2FC5EKS5.js +1 -0
  236. package/static/chunk-2TB2INBF.js +1 -0
  237. package/static/chunk-32L7RG2G.js +1 -0
  238. package/static/chunk-3OHSTP3R.js +1 -0
  239. package/static/chunk-3WLBVJ2S.js +1 -0
  240. package/static/{chunk-MTVSJTIW.js → chunk-3YDYZLF7.js} +1 -1
  241. package/static/chunk-42L6C5MT.js +1 -0
  242. package/static/chunk-4AGQL5GV.js +1 -0
  243. package/static/chunk-4BPSQMI2.js +1 -0
  244. package/static/chunk-4FDRWZWT.js +1 -0
  245. package/static/chunk-4GCCF6PF.js +1 -0
  246. package/static/chunk-4ORP3SBY.js +1 -0
  247. package/static/chunk-4PZPHJ7L.js +1 -0
  248. package/static/chunk-4QBOHIC3.js +1 -0
  249. package/static/chunk-4YT6K5KY.js +1 -0
  250. package/static/chunk-556I6YIW.js +1 -0
  251. package/static/chunk-5DPIGJU4.js +1 -0
  252. package/static/chunk-5E3TYOL3.js +1 -0
  253. package/static/chunk-5IL7C45D.js +1 -0
  254. package/static/chunk-5KJXGMKR.js +1 -0
  255. package/static/chunk-5S6KPQRA.js +1 -0
  256. package/static/chunk-5SPGSHKL.js +1 -0
  257. package/static/chunk-5WCQBTXW.js +1 -0
  258. package/static/chunk-5XUIPWOH.js +1 -0
  259. package/static/chunk-62WT7PI3.js +1 -0
  260. package/static/chunk-6B3GGAV3.js +4 -0
  261. package/static/chunk-6F6OMQ5H.js +1 -0
  262. package/static/chunk-6I5BGQHT.js +1 -0
  263. package/static/chunk-6NEBGCAZ.js +1 -0
  264. package/static/chunk-6NOS45DG.js +1 -0
  265. package/static/chunk-6OKLPRCD.js +1 -0
  266. package/static/chunk-6VEJCG43.js +1 -0
  267. package/static/chunk-77SS36Z2.js +1 -0
  268. package/static/chunk-7AXEPO3G.js +1 -0
  269. package/static/chunk-7CKHC72R.js +1 -0
  270. package/static/chunk-7DUTYOJG.js +1 -0
  271. package/static/chunk-7HKFYRPF.js +1 -0
  272. package/static/chunk-7NZJZATZ.js +1 -0
  273. package/static/chunk-AADK5D2H.js +1 -0
  274. package/static/chunk-ACUF7IKP.js +1 -0
  275. package/static/chunk-AGREZPV4.js +1 -0
  276. package/static/chunk-ATBJWFA3.js +1 -0
  277. package/static/chunk-ATXLZN2B.js +1 -0
  278. package/static/chunk-AZ5TF5Y3.js +1 -0
  279. package/static/chunk-BBHYIURC.js +1 -0
  280. package/static/chunk-BHZEPHRI.js +13 -0
  281. package/static/chunk-BODMMLVB.js +7 -0
  282. package/static/chunk-BSB4VROD.js +2 -0
  283. package/static/chunk-BU4ZICZR.js +1 -0
  284. package/static/chunk-C3AAEQKW.js +1 -0
  285. package/static/chunk-CFTKW432.js +1 -0
  286. package/static/chunk-CNOVT6KU.js +1 -0
  287. package/static/chunk-D56H3XE2.js +1 -0
  288. package/static/chunk-DFOOSIIA.js +1 -0
  289. package/static/chunk-DHFQIFOF.js +1 -0
  290. package/static/{chunk-3GMLWAFZ.js → chunk-DIC2MVRI.js} +1 -1
  291. package/static/chunk-DJDRX53V.js +2 -0
  292. package/static/chunk-DKGXUMLT.js +1 -0
  293. package/static/chunk-DQ3GEMPM.js +1 -0
  294. package/static/chunk-DRHPEERW.js +2 -0
  295. package/static/chunk-DWYP6ZGG.js +1 -0
  296. package/static/chunk-EDJAISWO.js +13 -0
  297. package/static/chunk-EIYRBM4J.js +1 -0
  298. package/static/chunk-EL6QL4TP.js +1 -0
  299. package/static/chunk-ERDZ7IVF.js +1 -0
  300. package/static/chunk-EVQKKVUZ.js +1 -0
  301. package/static/chunk-F2XG7EWI.js +1 -0
  302. package/static/chunk-F672FY5I.js +1 -0
  303. package/static/chunk-F6V37MKG.js +1 -0
  304. package/static/chunk-FCGTI42I.js +1 -0
  305. package/static/chunk-FNOTGWRW.js +1 -0
  306. package/static/chunk-FQHOSSCO.js +1 -0
  307. package/static/chunk-GAGHHYLF.js +1 -0
  308. package/static/chunk-GNZPP2VO.js +1 -0
  309. package/static/{chunk-JPT5WEAT.js → chunk-GOJYWL2M.js} +1 -1
  310. package/static/chunk-GRLHFXGB.js +1 -0
  311. package/static/chunk-H6WOTGQ5.js +1 -0
  312. package/static/{chunk-CHJ64RJM.js → chunk-H6ZXFINQ.js} +1 -1
  313. package/static/chunk-HC7F57NA.js +1 -0
  314. package/static/chunk-HCSWO7BO.js +7 -0
  315. package/static/chunk-HHWXIK2M.js +7 -0
  316. package/static/chunk-HKRGIRKB.js +3 -0
  317. package/static/chunk-HMOB6XC5.js +1 -0
  318. package/static/chunk-HNMGPG72.js +1 -0
  319. package/static/chunk-HS4S6BV3.js +1 -0
  320. package/static/chunk-I2S3XPC5.js +3 -0
  321. package/static/chunk-IJ7K7ATQ.js +1 -0
  322. package/static/chunk-IOIBQGHN.js +562 -0
  323. package/static/chunk-ITVA26X2.js +2 -0
  324. package/static/chunk-J6YSFHLZ.js +1 -0
  325. package/static/chunk-JAEJ6IMV.js +1 -0
  326. package/static/chunk-JB5R6V33.js +1 -0
  327. package/static/chunk-JF6WIV6M.js +1 -0
  328. package/static/chunk-JGB4LLUT.js +1 -0
  329. package/static/chunk-JGXVTKLG.js +1 -0
  330. package/static/chunk-JMYAD7E2.js +1 -0
  331. package/static/chunk-JSE63Q5X.js +1 -0
  332. package/static/chunk-JVV3ZL6L.js +1 -0
  333. package/static/chunk-JWPXQOS3.js +5 -0
  334. package/static/chunk-JXZCNFW7.js +1 -0
  335. package/static/chunk-JY2I3HGL.js +1 -0
  336. package/static/chunk-K657XPXA.js +1 -0
  337. package/static/chunk-KAVP6UXH.js +1 -0
  338. package/static/{chunk-3R74L4UU.js → chunk-KDEEERWZ.js} +1 -1
  339. package/static/chunk-KLOUBIO4.js +1 -0
  340. package/static/chunk-KMF3ZRAO.js +1 -0
  341. package/static/chunk-KT3TWCST.js +1 -0
  342. package/static/chunk-L6SYG23T.js +1 -0
  343. package/static/{chunk-LNTUR3GU.js → chunk-LRDKG274.js} +1 -1
  344. package/static/chunk-LRQSPCYZ.js +1 -0
  345. package/static/chunk-LUSVISM6.js +1 -0
  346. package/static/{chunk-LVSNIS5P.js → chunk-LYZGJZNP.js} +1 -1
  347. package/static/chunk-LZKI5P5T.js +1 -0
  348. package/static/chunk-M4XL3JN5.js +6 -0
  349. package/static/{chunk-UNCPXHHT.js → chunk-MGWG7OD7.js} +1 -1
  350. package/static/chunk-MIA5YBOI.js +1 -0
  351. package/static/chunk-MKUUWY6Y.js +1 -0
  352. package/static/chunk-MR3U7TKQ.js +1 -0
  353. package/static/chunk-MYM43ENO.js +1 -0
  354. package/static/chunk-NAH4V2R6.js +2 -0
  355. package/static/chunk-NBBDVVUF.js +1 -0
  356. package/static/chunk-NKGKBQBX.js +1 -0
  357. package/static/chunk-NMF2ZFBE.js +1 -0
  358. package/static/chunk-NN4ONTOT.js +1 -0
  359. package/static/chunk-NOPACN4F.js +1 -0
  360. package/static/chunk-NYJPOP4L.js +1 -0
  361. package/static/chunk-OQRWXCLY.js +1 -0
  362. package/static/chunk-PCFH5HCI.js +2 -0
  363. package/static/chunk-PJF5XUTO.js +1 -0
  364. package/static/{chunk-FJE6BOFL.js → chunk-PSUAQBYM.js} +1 -1
  365. package/static/chunk-PTLYIUFW.js +1 -0
  366. package/static/chunk-PXRT4L57.js +1 -0
  367. package/static/chunk-PZGLDZZM.js +1 -0
  368. package/static/chunk-Q4VNZGFI.js +1 -0
  369. package/static/chunk-Q556XB3S.js +1 -0
  370. package/static/{chunk-PB4AIT7O.js → chunk-Q7IXRPOO.js} +1 -1
  371. package/static/chunk-Q7U2VPIS.js +1 -0
  372. package/static/chunk-QM6CQMEX.js +1 -0
  373. package/static/chunk-QMHUIHSR.js +1 -0
  374. package/static/chunk-QVFPHTOH.js +1 -0
  375. package/static/chunk-R4MI25E2.js +1 -0
  376. package/static/chunk-R7JRAR3P.js +1 -0
  377. package/static/chunk-R7PNKQU2.js +1 -0
  378. package/static/chunk-RCAORRB7.js +1 -0
  379. package/static/chunk-RDNTK4YH.js +1 -0
  380. package/static/{chunk-VJTXJ43D.js → chunk-RK2ONYTL.js} +1 -1
  381. package/static/chunk-RK7XRDNB.js +1 -0
  382. package/static/chunk-RO7SAOLK.js +1 -0
  383. package/static/chunk-RQUUINHV.js +1 -0
  384. package/static/chunk-RUN556VW.js +1 -0
  385. package/static/chunk-S2VBGI6Q.js +1 -0
  386. package/static/chunk-S7S5M3AZ.js +1 -0
  387. package/static/chunk-SBLNYV74.js +1 -0
  388. package/static/chunk-SIZCHHUA.js +1 -0
  389. package/static/chunk-SRBOO7AO.js +1 -0
  390. package/static/{chunk-PVDHBQRM.js → chunk-STA7NTYL.js} +1 -1
  391. package/static/chunk-T3YI3BSS.js +1 -0
  392. package/static/chunk-TAL3RTTQ.js +1 -0
  393. package/static/chunk-TGLJFALR.js +1 -0
  394. package/static/chunk-TJZKTNNS.js +1 -0
  395. package/static/chunk-U4RW6XG5.js +1 -0
  396. package/static/chunk-UJTFWZEC.js +1 -0
  397. package/static/chunk-UPGVU5LG.js +1 -0
  398. package/static/chunk-UQ6O3I6W.js +1 -0
  399. package/static/{chunk-5NMSIIQB.js → chunk-V43RGNXA.js} +1 -1
  400. package/static/chunk-V6FA5QY4.js +1 -0
  401. package/static/chunk-VK7XMFVE.js +1 -0
  402. package/static/chunk-VQJYCYWI.js +1 -0
  403. package/static/chunk-VWIRXLNE.js +1 -0
  404. package/static/chunk-VZMVGIVW.js +1 -0
  405. package/static/chunk-VZPCXSRG.js +2 -0
  406. package/static/chunk-WR3MA3L3.js +1 -0
  407. package/static/chunk-XCLK7NJL.js +1 -0
  408. package/static/{chunk-DSWEWLXJ.js → chunk-XCPDPB5G.js} +1 -1
  409. package/static/chunk-XEGHEUP5.js +1 -0
  410. package/static/chunk-XKEBQNQJ.js +1 -0
  411. package/static/chunk-XOF4UW3S.js +1 -0
  412. package/static/chunk-XQGPSNQB.js +1 -0
  413. package/static/{chunk-QO6BTONN.js → chunk-Y4MAPE2C.js} +1 -1
  414. package/static/chunk-Y5RLD72B.js +1 -0
  415. package/static/{chunk-DPUVSXRB.js → chunk-Y5XTRCFK.js} +1 -1
  416. package/static/chunk-Y63UUJGJ.js +1 -0
  417. package/static/chunk-YBNAC7QM.js +1 -0
  418. package/static/chunk-YCTCESL4.js +1 -0
  419. package/static/chunk-YMAN4LIU.js +1 -0
  420. package/static/chunk-YTDE6SXT.js +1 -0
  421. package/static/chunk-YZPIUJB3.js +1 -0
  422. package/static/chunk-ZCOWBVOT.js +1 -0
  423. package/static/chunk-ZHRYYMYE.js +1 -0
  424. package/static/chunk-ZNXTOQFG.js +1 -0
  425. package/static/{chunk-URHTCJ7G.js → chunk-ZQLBPLXI.js} +1 -1
  426. package/static/chunk-ZXXHFBGL.js +1 -0
  427. package/static/favicon.ico +0 -0
  428. package/static/index.html +2 -2
  429. package/static/main-56PZQ6TJ.js +11 -0
  430. package/static/styles-Q4OZOSSK.css +1 -0
  431. package/server/applications/notifications/interfaces/user-mail-notification.js.map +0 -1
  432. package/static/assets/codemirror/mode/apl/apl.js +0 -174
  433. package/static/assets/codemirror/mode/asciiarmor/asciiarmor.js +0 -74
  434. package/static/assets/codemirror/mode/asn.1/asn.1.js +0 -204
  435. package/static/assets/codemirror/mode/asterisk/asterisk.js +0 -220
  436. package/static/assets/codemirror/mode/brainfuck/brainfuck.js +0 -85
  437. package/static/assets/codemirror/mode/clike/clike.js +0 -942
  438. package/static/assets/codemirror/mode/clojure/clojure.js +0 -293
  439. package/static/assets/codemirror/mode/cmake/cmake.js +0 -97
  440. package/static/assets/codemirror/mode/cobol/cobol.js +0 -255
  441. package/static/assets/codemirror/mode/coffeescript/coffeescript.js +0 -359
  442. package/static/assets/codemirror/mode/commonlisp/commonlisp.js +0 -125
  443. package/static/assets/codemirror/mode/crystal/crystal.js +0 -433
  444. package/static/assets/codemirror/mode/css/css.js +0 -862
  445. package/static/assets/codemirror/mode/cypher/cypher.js +0 -152
  446. package/static/assets/codemirror/mode/d/d.js +0 -223
  447. package/static/assets/codemirror/mode/dart/dart.js +0 -168
  448. package/static/assets/codemirror/mode/diff/diff.js +0 -47
  449. package/static/assets/codemirror/mode/django/django.js +0 -356
  450. package/static/assets/codemirror/mode/dockerfile/dockerfile.js +0 -211
  451. package/static/assets/codemirror/mode/dtd/dtd.js +0 -142
  452. package/static/assets/codemirror/mode/dylan/dylan.js +0 -352
  453. package/static/assets/codemirror/mode/ebnf/ebnf.js +0 -195
  454. package/static/assets/codemirror/mode/ecl/ecl.js +0 -206
  455. package/static/assets/codemirror/mode/eiffel/eiffel.js +0 -160
  456. package/static/assets/codemirror/mode/elm/elm.js +0 -245
  457. package/static/assets/codemirror/mode/erlang/erlang.js +0 -619
  458. package/static/assets/codemirror/mode/factor/factor.js +0 -85
  459. package/static/assets/codemirror/mode/fcl/fcl.js +0 -173
  460. package/static/assets/codemirror/mode/forth/forth.js +0 -180
  461. package/static/assets/codemirror/mode/fortran/fortran.js +0 -188
  462. package/static/assets/codemirror/mode/gas/gas.js +0 -355
  463. package/static/assets/codemirror/mode/gfm/gfm.js +0 -129
  464. package/static/assets/codemirror/mode/gherkin/gherkin.js +0 -194
  465. package/static/assets/codemirror/mode/go/go.js +0 -187
  466. package/static/assets/codemirror/mode/groovy/groovy.js +0 -245
  467. package/static/assets/codemirror/mode/haml/haml.js +0 -161
  468. package/static/assets/codemirror/mode/handlebars/handlebars.js +0 -70
  469. package/static/assets/codemirror/mode/haskell/haskell.js +0 -268
  470. package/static/assets/codemirror/mode/haskell-literate/haskell-literate.js +0 -43
  471. package/static/assets/codemirror/mode/haxe/haxe.js +0 -515
  472. package/static/assets/codemirror/mode/htmlembedded/htmlembedded.js +0 -37
  473. package/static/assets/codemirror/mode/htmlmixed/htmlmixed.js +0 -153
  474. package/static/assets/codemirror/mode/http/http.js +0 -113
  475. package/static/assets/codemirror/mode/idl/idl.js +0 -290
  476. package/static/assets/codemirror/mode/javascript/javascript.js +0 -960
  477. package/static/assets/codemirror/mode/jinja2/jinja2.js +0 -193
  478. package/static/assets/codemirror/mode/jsx/jsx.js +0 -149
  479. package/static/assets/codemirror/mode/julia/julia.js +0 -390
  480. package/static/assets/codemirror/mode/livescript/livescript.js +0 -280
  481. package/static/assets/codemirror/mode/lua/lua.js +0 -160
  482. package/static/assets/codemirror/mode/markdown/markdown.js +0 -886
  483. package/static/assets/codemirror/mode/mathematica/mathematica.js +0 -176
  484. package/static/assets/codemirror/mode/mbox/mbox.js +0 -129
  485. package/static/assets/codemirror/mode/meta.js +0 -221
  486. package/static/assets/codemirror/mode/mirc/mirc.js +0 -193
  487. package/static/assets/codemirror/mode/mllike/mllike.js +0 -359
  488. package/static/assets/codemirror/mode/modelica/modelica.js +0 -245
  489. package/static/assets/codemirror/mode/mscgen/mscgen.js +0 -175
  490. package/static/assets/codemirror/mode/mumps/mumps.js +0 -148
  491. package/static/assets/codemirror/mode/nginx/nginx.js +0 -178
  492. package/static/assets/codemirror/mode/nsis/nsis.js +0 -95
  493. package/static/assets/codemirror/mode/ntriples/ntriples.js +0 -195
  494. package/static/assets/codemirror/mode/octave/octave.js +0 -139
  495. package/static/assets/codemirror/mode/oz/oz.js +0 -252
  496. package/static/assets/codemirror/mode/pascal/pascal.js +0 -136
  497. package/static/assets/codemirror/mode/pegjs/pegjs.js +0 -111
  498. package/static/assets/codemirror/mode/perl/perl.js +0 -836
  499. package/static/assets/codemirror/mode/php/php.js +0 -234
  500. package/static/assets/codemirror/mode/pig/pig.js +0 -178
  501. package/static/assets/codemirror/mode/powershell/powershell.js +0 -398
  502. package/static/assets/codemirror/mode/properties/properties.js +0 -78
  503. package/static/assets/codemirror/mode/protobuf/protobuf.js +0 -72
  504. package/static/assets/codemirror/mode/pug/pug.js +0 -591
  505. package/static/assets/codemirror/mode/puppet/puppet.js +0 -220
  506. package/static/assets/codemirror/mode/python/python.js +0 -402
  507. package/static/assets/codemirror/mode/q/q.js +0 -139
  508. package/static/assets/codemirror/mode/r/r.js +0 -190
  509. package/static/assets/codemirror/mode/rpm/changes/index.html +0 -66
  510. package/static/assets/codemirror/mode/rpm/rpm.js +0 -109
  511. package/static/assets/codemirror/mode/rst/rst.js +0 -557
  512. package/static/assets/codemirror/mode/ruby/ruby.js +0 -303
  513. package/static/assets/codemirror/mode/rust/rust.js +0 -72
  514. package/static/assets/codemirror/mode/sas/sas.js +0 -303
  515. package/static/assets/codemirror/mode/sass/sass.js +0 -459
  516. package/static/assets/codemirror/mode/scheme/scheme.js +0 -284
  517. package/static/assets/codemirror/mode/shell/shell.js +0 -168
  518. package/static/assets/codemirror/mode/sieve/sieve.js +0 -193
  519. package/static/assets/codemirror/mode/slim/slim.js +0 -575
  520. package/static/assets/codemirror/mode/smalltalk/smalltalk.js +0 -168
  521. package/static/assets/codemirror/mode/smarty/smarty.js +0 -225
  522. package/static/assets/codemirror/mode/solr/solr.js +0 -104
  523. package/static/assets/codemirror/mode/soy/soy.js +0 -665
  524. package/static/assets/codemirror/mode/sparql/sparql.js +0 -184
  525. package/static/assets/codemirror/mode/spreadsheet/spreadsheet.js +0 -112
  526. package/static/assets/codemirror/mode/sql/sql.js +0 -529
  527. package/static/assets/codemirror/mode/stex/stex.js +0 -264
  528. package/static/assets/codemirror/mode/stylus/stylus.js +0 -775
  529. package/static/assets/codemirror/mode/swift/swift.js +0 -221
  530. package/static/assets/codemirror/mode/tcl/tcl.js +0 -140
  531. package/static/assets/codemirror/mode/textile/textile.js +0 -469
  532. package/static/assets/codemirror/mode/tiddlywiki/tiddlywiki.css +0 -14
  533. package/static/assets/codemirror/mode/tiddlywiki/tiddlywiki.js +0 -308
  534. package/static/assets/codemirror/mode/tiki/tiki.css +0 -26
  535. package/static/assets/codemirror/mode/tiki/tiki.js +0 -312
  536. package/static/assets/codemirror/mode/toml/toml.js +0 -88
  537. package/static/assets/codemirror/mode/tornado/tornado.js +0 -68
  538. package/static/assets/codemirror/mode/troff/troff.js +0 -84
  539. package/static/assets/codemirror/mode/ttcn/ttcn.js +0 -283
  540. package/static/assets/codemirror/mode/ttcn-cfg/ttcn-cfg.js +0 -214
  541. package/static/assets/codemirror/mode/turtle/turtle.js +0 -162
  542. package/static/assets/codemirror/mode/twig/twig.js +0 -141
  543. package/static/assets/codemirror/mode/vb/vb.js +0 -275
  544. package/static/assets/codemirror/mode/vbscript/vbscript.js +0 -350
  545. package/static/assets/codemirror/mode/velocity/velocity.js +0 -202
  546. package/static/assets/codemirror/mode/verilog/verilog.js +0 -781
  547. package/static/assets/codemirror/mode/vhdl/vhdl.js +0 -189
  548. package/static/assets/codemirror/mode/vue/vue.js +0 -77
  549. package/static/assets/codemirror/mode/wast/wast.js +0 -132
  550. package/static/assets/codemirror/mode/webidl/webidl.js +0 -195
  551. package/static/assets/codemirror/mode/xml/xml.js +0 -417
  552. package/static/assets/codemirror/mode/xquery/xquery.js +0 -448
  553. package/static/assets/codemirror/mode/yacas/yacas.js +0 -204
  554. package/static/assets/codemirror/mode/yaml/yaml.js +0 -120
  555. package/static/assets/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js +0 -72
  556. package/static/assets/codemirror/mode/z80/z80.js +0 -116
  557. package/static/chunk-2KLC4T2Z.js +0 -1
  558. package/static/chunk-2VMSXRCB.js +0 -12
  559. package/static/chunk-3OHSRRKH.js +0 -4
  560. package/static/chunk-3R4WKOHQ.js +0 -1
  561. package/static/chunk-3XVM35O2.js +0 -1
  562. package/static/chunk-3YVRP3VM.js +0 -2
  563. package/static/chunk-5UKZLU5H.js +0 -1
  564. package/static/chunk-AF24EYXU.js +0 -1
  565. package/static/chunk-AKQVEHO6.js +0 -2
  566. package/static/chunk-BCVX464U.js +0 -2
  567. package/static/chunk-BQV4FRM6.js +0 -1
  568. package/static/chunk-CETH7UYS.js +0 -1
  569. package/static/chunk-DIT6W7VM.js +0 -562
  570. package/static/chunk-DKSEQTMX.js +0 -1
  571. package/static/chunk-FZ3JPGYZ.js +0 -1
  572. package/static/chunk-IQSKQXC3.js +0 -1
  573. package/static/chunk-ITUFI2BJ.js +0 -1
  574. package/static/chunk-LCTZJ537.js +0 -1
  575. package/static/chunk-LK2UCQJ6.js +0 -1
  576. package/static/chunk-LP5TBXEN.js +0 -7
  577. package/static/chunk-N3U6637P.js +0 -1
  578. package/static/chunk-NNV4OXSB.js +0 -1
  579. package/static/chunk-O6FYXVHI.js +0 -1
  580. package/static/chunk-OOGP4WSH.js +0 -2
  581. package/static/chunk-PCWDQPOM.js +0 -2
  582. package/static/chunk-PNR6M34W.js +0 -1
  583. package/static/chunk-Q5KM7LTX.js +0 -1
  584. package/static/chunk-QHC6ZPQ4.js +0 -1
  585. package/static/chunk-QMRBZHE4.js +0 -1
  586. package/static/chunk-QSJRY3TF.js +0 -1
  587. package/static/chunk-QUUIRSYT.js +0 -1
  588. package/static/chunk-RFH46UW3.js +0 -1
  589. package/static/chunk-RSXHRKM5.js +0 -1
  590. package/static/chunk-RV3VZJPZ.js +0 -1
  591. package/static/chunk-S7HNXVRB.js +0 -1
  592. package/static/chunk-SBZ572Q4.js +0 -2
  593. package/static/chunk-SJR5R3Y4.js +0 -1
  594. package/static/chunk-SLHTEGRU.js +0 -1
  595. package/static/chunk-SSFF27P2.js +0 -24
  596. package/static/chunk-V3LHHZYN.js +0 -1
  597. package/static/chunk-VQQKMY2C.js +0 -1
  598. package/static/chunk-WSSU2HXE.js +0 -1
  599. package/static/chunk-XDZGW64M.js +0 -3
  600. package/static/chunk-XTRDKGKG.js +0 -1
  601. package/static/chunk-YLWTEC3X.js +0 -1
  602. package/static/chunk-Z5J5F5SX.js +0 -1
  603. package/static/main-4H5BJY3J.js +0 -9
  604. package/static/scripts-WRDOQIU5.js +0 -24
  605. package/static/styles-2C2UNCNB.css +0 -1
package/CHANGELOG.md CHANGED
@@ -1,17 +1,63 @@
1
- ## [1.8.1](https://github.com/Sync-in/server/compare/v1.8.0...v1.8.1) (2025-10-30)
2
1
 
3
- ### Highlights
2
+ ## [1.9.1](https://github.com/Sync-in/server/compare/v1.8.1...v1.9.1) (2025-11-25)
3
+
4
+ ### Highlights 1.9
5
+
6
+ * 🎨 **Visual identity updated** — refreshed branding.
7
+ * 🖼️ **Enhanced image viewer** — browse all images in a directory, start slideshows, use fullscreen mode, and view detailed properties.
8
+ * ✏️ **Native text editor** — search, syntax highlighting, undo/redo, and lock/unlock capabilities built directly into the UI.
9
+ * 🔐 **Improved file lock management** — users can request unlocks from lock owners, and file owners can now remove locks themselves.
10
+ * ⚠️ **Overwrite confirmation dialogs** — added confirmation prompts for uploads, renaming, copying, and moving files to prevent accidental overwrites.
11
+
12
+ ➡️ [More details](https://sync-in.com/news/sync-in-server-1-9)
13
+
14
+
15
+ ### Features
16
+
17
+ * **admin:** add server update notification support ([fc72430](https://github.com/Sync-in/server/commit/fc72430d69b9d2fb31d24ef680efd602a2c94d87))
18
+ * **backend:auth:** allow cn LDAP attribute and add AD-specific logic ([6998b1a](https://github.com/Sync-in/server/commit/6998b1af24bc6a360a146f71d8d264c582e89edc))
19
+ * **backend:auth:** Allow the LDAP `mail` attribute to be used as the login attribute, and allow users to authenticate using either the login attribute or their email address ([a683b57](https://github.com/Sync-in/server/commit/a683b5760ce9386b51c7e21e8699bb8a8d9335c5))
20
+ * **backend:files:** improve file upload handling with comprehensive overwrite support and directory conflict resolution ([e69a687](https://github.com/Sync-in/server/commit/e69a687071c0d5e7fc8bd76cef820c87a35e852c))
21
+ * **docker:onlyoffice:** update DocumentServer image to v9.1 ([c64a3ae](https://github.com/Sync-in/server/commit/c64a3aeafc70b275acc9d2fa50a5b30517325673))
22
+ * **files:** add directory size retrieval with UI and API integration ([4528b43](https://github.com/Sync-in/server/commit/4528b438e0819d3e6d9f72c11fab931257cadad0))
23
+ * **files:** add overwrite confirmation dialog for file rename and update API to support overwrite behavior ([c7c0d96](https://github.com/Sync-in/server/commit/c7c0d96d46144062cda739e8f32726f27deb8911))
24
+ * **files:** add overwrite confirmation dialog for file uploads and adapt API to support overwrite functionality ([d39822f](https://github.com/Sync-in/server/commit/d39822fd2d787b2b3477214c5ab885e7f712264e))
25
+ * **files:** add unlock request feature and enable force unlock for file owners ([7441337](https://github.com/Sync-in/server/commit/7441337dd0035ef681ece616d3e21870134ea511))
26
+ * **files:** enable locking and unlocking of edited files with improved handling and UI integration ([24ad66b](https://github.com/Sync-in/server/commit/24ad66b034e3287a5bc81c504b383539e025fc10))
27
+ * **files:** improve file handling with edit mode toggle, unsaved changes warning, enhanced modal logic, and updated constants ([bcc3ad2](https://github.com/Sync-in/server/commit/bcc3ad28bd26b042de50506c6a5bb71aa1e720ca))
28
+ * **frontend:config:** enhance notifications with `maxOpened` and `autoDismiss` properties ([cf850bf](https://github.com/Sync-in/server/commit/cf850bf43f61306e7bb2ee5306741f2628f2d89a))
29
+ * **frontend:files:** add ability to edit basic text files ([85b56e2](https://github.com/Sync-in/server/commit/85b56e23d5c8c11ed62ef281bc2370965090305f))
30
+ * **frontend:files:** add fulscreen button in image viewer ([b834618](https://github.com/Sync-in/server/commit/b8346182fd3d01061573111bf80ba9aecca86e23))
31
+ * **frontend:files:** add new translations and improve text viewer with updated read-only state handling and line wrapping ([e90c91e](https://github.com/Sync-in/server/commit/e90c91ec48e0d46cbbb4245a0e2fc53549cc8e3a))
32
+ * **frontend:files:** add overwrite confirmation dialog for copy/move actions ([fa2d601](https://github.com/Sync-in/server/commit/fa2d601aba4aa0ad1e4f7142212ee64db3e73a96))
33
+ * **frontend:files:** add undo and redo functionality with i18n updates and improved editor error handling ([daccfbc](https://github.com/Sync-in/server/commit/daccfbcf7c01fe71421c696a4857a966f9bfef9b))
34
+ * **frontend:files:** enhance overwrite handling by updating MIME type on rename and improving file model consistency and UI visuals ([f68a073](https://github.com/Sync-in/server/commit/f68a07395487dd27779fa9ec52943ccbd7e1f722))
35
+ * **frontend:files:** enhance text viewer with search panel toggle and keyboard shortcuts handling ([5b411f0](https://github.com/Sync-in/server/commit/5b411f084913ab2ece2d499d85e3fab3b1c26f29))
36
+ * **frontend:files:** image viewer slideshow ([49bbd4e](https://github.com/Sync-in/server/commit/49bbd4e2ea325832e30a97b969b3043c8d294ebc))
37
+ * **frontend:files:** improve text viewer with line wrapping, saving state, and enhanced search panel handling ([e5f0863](https://github.com/Sync-in/server/commit/e5f0863bbd921ef97879ff076475aaa46a21d051))
38
+ * **frontend:files:** improve text viewer with save error handling and updated file upload logic ([034c7a4](https://github.com/Sync-in/server/commit/034c7a4db4961433c2d9223229edbee345f2ee67))
39
+ * **frontend:files:** start implementing image viewer and folder slideshow ([7a65927](https://github.com/Sync-in/server/commit/7a65927bc3bcfee88372f0a913db68c0daa1f768))
40
+ * **frontend:links:** update navigation to enter spaces and shares directly instead of selecting them ([fd64265](https://github.com/Sync-in/server/commit/fd6426566c0275daaf82dc4ae21809e6682b90b8))
41
+ * **frontend:modals:** improve modal animations, lifecycle handling, and state management ([bad0696](https://github.com/Sync-in/server/commit/bad06964b65586b751ce0c9cd4e163d921828a63))
42
+
4
43
 
5
- * 🌍 **14 languages supported** — added 12 new ones: 🇩🇪 🇪🇸 🇵🇹 🇧🇷 🇮🇹 🇨🇳 🇮🇳 🇹🇷 🇯🇵 🇰🇷 🇵🇱 🇷🇺
6
- * ⚡ **Better suited for small systems** – reduced the default number of backend workers from **2 to 1** to improve memory efficiency on lightweight
7
- setups (e.g. Raspberry Pi).
8
- * 😈 **FreeBSD support** npm distribution is now compatible with FreeBSD
9
- * 🔍 **Indexing & search controls** new config to enable/disable indexing, per-space toggles, and full-text search preferences.
10
- * 📊 **Quotas** define storage quotas for external shares; storage from anchored external locations now counts toward the space’s total usage.
11
- * 🖼️ **Thumbnails** photo thumbnail generation is now **3× faster**.
12
- * 🐳 **Docker** minimized system dependencies for a **lighter and more efficient image** (from 562MB to 357MB, saving 205MB!).
44
+ ### Bug Fixes
45
+
46
+ * **ci:** replace static version import with dynamic version loader, update Dockerfile and add utility function ([15f4752](https://github.com/Sync-in/server/commit/15f4752906ac04ceaf7004162f70f5ba8b9a59cc))
47
+ * **backend:common:** prevent errors on invalid image metadata with `failOn: 'none'` option in sharp ([901fdf8](https://github.com/Sync-in/server/commit/901fdf8cf9ede111cd821363a2a28470c5d9d314))
48
+ * **backend:files:** avoid copy failures when sample documents are read-only and files are written to a CIFS share by falling back to stream copy ([3b734b8](https://github.com/Sync-in/server/commit/3b734b82b8d02072aa09d941ffd7b911cfcf3950))
49
+ * **backend:files:** correct `isDir` SQL logic to handle external paths without associated file IDs ([b3ce7d4](https://github.com/Sync-in/server/commit/b3ce7d4ae66556d455bc5d5495ed2fe070c15efc))
50
+ * **backend:files:** correct directory flag and ensure consistent file move operation in trash handling ([e85ead7](https://github.com/Sync-in/server/commit/e85ead7e7f8a327466279af2d103d3a4d5644b80))
51
+ * **backend:files:** enable `cacheControl` to ensure consistent client-side caching behavior ([25ab568](https://github.com/Sync-in/server/commit/25ab56808b7f4507a09c570bc7e7623077d5c594))
52
+ * **backend:files:** ensure locks are visible on anchored and shared files ([6445333](https://github.com/Sync-in/server/commit/64453339e1ae7f4e8a8e8f061effbccaf5070aa6))
53
+ * **backend:files:** set `maxAge` to 0 to enforce immediate cache invalidation ([293f34c](https://github.com/Sync-in/server/commit/293f34cb0e4bf7ac46bde6b4dc2a2432c57c04ec))
54
+ * **backend:links:** restore access to anchored files from an external location when shared via a link ([f61f09f](https://github.com/Sync-in/server/commit/f61f09fdeefaff2492ae39423ef0958962562db3))
55
+ * **backend:shares:** ensure correct file path for root space shares owned by user ([f5adb55](https://github.com/Sync-in/server/commit/f5adb55612622875ccfcb29ebcc754c974f186fd))
56
+ * **backend:websocket:** prevent server connection from closing on shutdown hooks ([8714644](https://github.com/Sync-in/server/commit/8714644f4d6d35d8d9297bc2f47e2e3eed485938))
57
+ * **frontend:drag:** prevent drag-and-drop actions in the shares list and ensure proper drag event handling ([f19ab4f](https://github.com/Sync-in/server/commit/f19ab4f7ed976d909cda323f1839d458a895ec3d))
58
+ * **frontend:files:** sync read-only value with opening mode in the text editor ([dfff2dc](https://github.com/Sync-in/server/commit/dfff2dcf152e049e25a3f07f92a41ea4a8af4805))
13
59
 
14
- ➡️ [More details](https://sync-in.com/news/sync-in-server-1-8)
60
+ ## [1.8.1](https://github.com/Sync-in/server/compare/v1.8.0...v1.8.1) (2025-10-30)
15
61
 
16
62
  ### Bug Fixes
17
63
 
@@ -19,10 +19,10 @@ logger:
19
19
  # stdout: if false logs are written to the run directory
20
20
  # default: `true`
21
21
  stdout: true
22
- # colorize output
22
+ # Colorize output.
23
23
  # default: `true`
24
24
  colorize: true
25
- # path to the log file used when stdout is set to false
25
+ # Path to the log file used when stdout is set to false
26
26
  filePath:
27
27
  mysql:
28
28
  # required
@@ -33,20 +33,20 @@ cache:
33
33
  # adapter: `mysql` | `redis`
34
34
  # default: `mysql`
35
35
  adapter: mysql
36
- # ttl in seconds
36
+ # TTL in seconds
37
37
  # default: `60`
38
38
  ttl: 60
39
- # redis adapter url
39
+ # Redis adapter url
40
40
  # default: `redis://127.0.0.1:6379`
41
41
  redis: redis://127.0.0.1:6379
42
42
  websocket:
43
43
  # adapter: `cluster` (Node.js Workers: default) | `redis`
44
44
  # default: `cluster`
45
45
  adapter: cluster
46
- # cors origin allowed
46
+ # Cors origin allowed
47
47
  # default: `*`
48
48
  corsOrigin: '*'
49
- # redis adapter url
49
+ # Redis adapter url
50
50
  # default: `redis://127.0.0.1:6379`
51
51
  redis: redis://127.0.0.1:6379
52
52
  mail:
@@ -59,9 +59,9 @@ mail:
59
59
  auth:
60
60
  user: user
61
61
  pass: password
62
- # secure: defines if the connection should use SSL (if true) or not (if false)
63
- # note: setting `secure: false` does not necessarily mean messages are sent in plaintext
64
- # if the server supports STARTTLS, the connection is usually upgraded to TLS automatically
62
+ # Defines if the connection should use SSL (if true) or not (if false)
63
+ # Note: setting `secure: false` does not necessarily mean messages are sent in plaintext
64
+ # If the server supports STARTTLS, the connection is usually upgraded to TLS automatically
65
65
  # default: `false`
66
66
  secure: false
67
67
  # ignoreTLS: if true, disables the use of STARTTLS even if the server advertises it
@@ -70,28 +70,28 @@ mail:
70
70
  # rejectUnauthorized: reject the connection if the server's TLS certificate is invalid
71
71
  # default: false
72
72
  rejectUnauthorized: false
73
- # enable logger
73
+ # Enable logger
74
74
  # default: `false`
75
75
  logger: false
76
- # set log level to debug
76
+ # Set log level to debug
77
77
  # default: `false`
78
78
  debug: false
79
79
  auth:
80
80
  # adapter : `mysql` | `ldap`
81
81
  # default: `mysql`
82
82
  method: mysql
83
- # key used to encrypt user secret keys in the database
84
- # optional, but strongly recommended
85
- # warning: do not change or remove the encryption key after MFA activation, or the codes will become invalid
83
+ # Key used to encrypt user secret keys in the database
84
+ # Optional but strongly recommended
85
+ # Warning: do not change or remove the encryption key after MFA activation, or the codes will become invalid
86
86
  encryptionKey: changeEncryptionKeyWithStrongKey
87
- # multifactor authentication
87
+ # Multifactor authentication
88
88
  mfa:
89
- # totp configuration
89
+ # TOTP configuration
90
90
  totp:
91
- # enable TOTP authentication
91
+ # Enable TOTP authentication
92
92
  # default: true
93
93
  enabled: true
94
- # name displayed in the authentication app (FreeOTP, Proton Authenticator, Aegis Authenticator etc.)
94
+ # Name displayed in the authentication app (FreeOTP, Proton Authenticator, Aegis Authenticator etc.)
95
95
  # default: Sync-in
96
96
  issuer: Sync-in
97
97
  # cookie sameSite setting: `lax` | `strict`
@@ -99,14 +99,14 @@ auth:
99
99
  cookieSameSite: strict
100
100
  token:
101
101
  access:
102
- # used for token and cookie signatures
102
+ # Used for token and cookie signatures
103
103
  # required
104
104
  secret: changeAccessWithStrongSecret
105
105
  # token expiration = cookie maxAge
106
106
  # default: `30m`
107
107
  expiration: 30m
108
108
  refresh:
109
- # used for token and cookie signatures
109
+ # Used for token and cookie signatures
110
110
  # required
111
111
  secret: changeRefreshWithStrongSecret
112
112
  # token expiration = cookie maxAge
@@ -120,10 +120,13 @@ auth:
120
120
  # filter, e.g: (acl=admin)
121
121
  filter:
122
122
  attributes:
123
- # login attribute: `uid` | `sAMAccountName` | `userPrincipalName`, used to authenticate the user
123
+ # Login attribute used to construct the user's DN for binding.
124
+ # The value of this attribute is used as the naming attribute (first RDN) when forming the Distinguished Name (DN) during authentication
125
+ # login: `uid` | `cn` | `mail` | `sAMAccountName` | `userPrincipalName`, used to authenticate the user
124
126
  # default: `uid`
125
127
  login: uid
126
- # email attribute: `mail` or `email`
128
+ # Attribute used to retrieve the user's email address
129
+ # email: `mail` or `email`
127
130
  # default: `mail`
128
131
  email: mail
129
132
  # adminGroup: The CN of a group containing Sync-in administrators (e.g., administrators)
@@ -148,14 +151,14 @@ applications:
148
151
  # enable onlyoffice integration
149
152
  # default: false
150
153
  enabled: false
151
- # for an external server (e.g., https://onlyoffice.domain.com), remember the url must be accessible from browser !
152
- # if externalServer is empty (case of official docker compose), we use the local instance
154
+ # For an external server (e.g., https://onlyoffice.domain.com), remember the url must be accessible from browser!
155
+ # If externalServer is empty (case of official docker compose), we use the local instance
153
156
  # default: null
154
157
  externalServer:
155
- # secret used for jwt tokens, it must be the same on the onlyoffice server
158
+ # Secret used for jwt tokens, it must be the same on the onlyoffice server
156
159
  # required
157
160
  secret: onlyOfficeSecret
158
- # if you use https, set to `true`
161
+ # If you use https, set to `true`.
159
162
  # default: `false`
160
163
  verifySSL: false
161
164
  appStore:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sync-in/server",
3
- "version": "1.8.1",
3
+ "version": "1.9.1",
4
4
  "description": "The secure, open-source platform for file storage, sharing, collaboration, and sync",
5
5
  "author": {
6
6
  "name": "Johan Legrand",
@@ -80,29 +80,29 @@
80
80
  "@knaadh/nestjs-drizzle-mysql2": "1.2.0",
81
81
  "@lukeed/ms": "2.0.2",
82
82
  "@nestjs/axios": "4.0.1",
83
- "@nestjs/common": "11.1.8",
83
+ "@nestjs/common": "11.1.9",
84
84
  "@nestjs/config": "4.0.2",
85
- "@nestjs/core": "11.1.8",
85
+ "@nestjs/core": "11.1.9",
86
86
  "@nestjs/jwt": "11.0.1",
87
87
  "@nestjs/passport": "11.0.5",
88
- "@nestjs/platform-fastify": "11.1.8",
89
- "@nestjs/platform-socket.io": "11.1.8",
88
+ "@nestjs/platform-fastify": "11.1.9",
89
+ "@nestjs/platform-socket.io": "11.1.9",
90
90
  "@nestjs/schedule": "6.0.1",
91
- "@nestjs/websockets": "11.1.8",
91
+ "@nestjs/websockets": "11.1.9",
92
92
  "@socket.io/cluster-adapter": "0.3.0",
93
93
  "@socket.io/redis-adapter": "8.3.0",
94
94
  "@types/text-to-svg": "3.1.4",
95
95
  "archiver": "7.0.1",
96
- "bcryptjs": "3.0.2",
96
+ "bcryptjs": "3.0.3",
97
97
  "class-transformer": "0.5.1",
98
98
  "class-validator": "0.14.2",
99
99
  "deepmerge": "4.3.1",
100
- "drizzle-kit": "0.31.5",
100
+ "drizzle-kit": "0.31.7",
101
101
  "drizzle-orm": "0.44.7",
102
- "fast-xml-parser": "5.3.0",
102
+ "fast-xml-parser": "5.3.2",
103
103
  "fs-extra": "11.3.2",
104
104
  "html-to-text": "9.0.5",
105
- "js-yaml": "4.1.0",
105
+ "js-yaml": "4.1.1",
106
106
  "ldapts": "8.0.9",
107
107
  "mime-types": "3.0.1",
108
108
  "mysql2": "3.15.3",
@@ -114,14 +114,14 @@
114
114
  "passport": "0.7.0",
115
115
  "pino-pretty": "13.1.2",
116
116
  "qrcode-generator": "2.0.4",
117
- "redis": "5.9.0",
118
- "sax": "1.4.1",
119
- "sharp": "0.34.4",
117
+ "redis": "5.10.0",
118
+ "sax": "1.4.3",
119
+ "sharp": "0.34.5",
120
120
  "socket.io": "4.8.1",
121
- "tar": "7.5.1",
121
+ "tar": "7.5.2",
122
122
  "text-to-svg": "3.1.5",
123
123
  "time2fa": "1.4.2",
124
- "unpdf": "1.3.2",
124
+ "unpdf": "1.4.0",
125
125
  "yauzl": "3.2.0"
126
126
  }
127
127
  }
@@ -18,8 +18,17 @@ _export(exports, {
18
18
  },
19
19
  get CONTENT_SECURITY_POLICY () {
20
20
  return CONTENT_SECURITY_POLICY;
21
+ },
22
+ get USER_AGENT () {
23
+ return USER_AGENT;
24
+ },
25
+ get VERSION () {
26
+ return VERSION;
21
27
  }
22
28
  });
29
+ const _appfunctions = require("./app.functions");
30
+ const VERSION = (0, _appfunctions.loadVersion)();
31
+ const USER_AGENT = `sync-in-server/${VERSION}`;
23
32
  const CONTENT_SECURITY_POLICY = (onlyOfficeServer)=>({
24
33
  useDefaults: false,
25
34
  directives: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../backend/src/app.constants.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nexport const CONTENT_SECURITY_POLICY = (onlyOfficeServer: string) => ({\n useDefaults: false,\n directives: {\n defaultSrc: [\"'self'\", onlyOfficeServer || ''],\n scriptSrc: [\"'self'\", \"'unsafe-inline'\", onlyOfficeServer || ''],\n styleSrc: [\"'self'\", \"'unsafe-inline'\"],\n imgSrc: [\"'self'\", 'data:'],\n fontSrc: [\"'self'\"]\n }\n})\n\nexport const CONNECT_ERROR_CODE = new Set(['ECONNREFUSED', 'ETIMEDOUT', 'ENOTFOUND'])\n"],"names":["CONNECT_ERROR_CODE","CONTENT_SECURITY_POLICY","onlyOfficeServer","useDefaults","directives","defaultSrc","scriptSrc","styleSrc","imgSrc","fontSrc","Set"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAaYA;eAAAA;;QAXAC;eAAAA;;;AAAN,MAAMA,0BAA0B,CAACC,mBAA8B,CAAA;QACpEC,aAAa;QACbC,YAAY;YACVC,YAAY;gBAAC;gBAAUH,oBAAoB;aAAG;YAC9CI,WAAW;gBAAC;gBAAU;gBAAmBJ,oBAAoB;aAAG;YAChEK,UAAU;gBAAC;gBAAU;aAAkB;YACvCC,QAAQ;gBAAC;gBAAU;aAAQ;YAC3BC,SAAS;gBAAC;aAAS;QACrB;IACF,CAAA;AAEO,MAAMT,qBAAqB,IAAIU,IAAI;IAAC;IAAgB;IAAa;CAAY"}
1
+ {"version":3,"sources":["../../backend/src/app.constants.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { loadVersion } from './app.functions'\n\nexport const VERSION = loadVersion()\nexport const USER_AGENT = `sync-in-server/${VERSION}`\nexport const CONTENT_SECURITY_POLICY = (onlyOfficeServer: string) => ({\n useDefaults: false,\n directives: {\n defaultSrc: [\"'self'\", onlyOfficeServer || ''],\n scriptSrc: [\"'self'\", \"'unsafe-inline'\", onlyOfficeServer || ''],\n styleSrc: [\"'self'\", \"'unsafe-inline'\"],\n imgSrc: [\"'self'\", 'data:'],\n fontSrc: [\"'self'\"]\n }\n})\n\nexport const CONNECT_ERROR_CODE = new Set(['ECONNREFUSED', 'ETIMEDOUT', 'ENOTFOUND'])\n"],"names":["CONNECT_ERROR_CODE","CONTENT_SECURITY_POLICY","USER_AGENT","VERSION","loadVersion","onlyOfficeServer","useDefaults","directives","defaultSrc","scriptSrc","styleSrc","imgSrc","fontSrc","Set"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAiBYA;eAAAA;;QAXAC;eAAAA;;QADAC;eAAAA;;QADAC;eAAAA;;;8BAFe;AAErB,MAAMA,UAAUC,IAAAA,yBAAW;AAC3B,MAAMF,aAAa,CAAC,eAAe,EAAEC,SAAS;AAC9C,MAAMF,0BAA0B,CAACI,mBAA8B,CAAA;QACpEC,aAAa;QACbC,YAAY;YACVC,YAAY;gBAAC;gBAAUH,oBAAoB;aAAG;YAC9CI,WAAW;gBAAC;gBAAU;gBAAmBJ,oBAAoB;aAAG;YAChEK,UAAU;gBAAC;gBAAU;aAAkB;YACvCC,QAAQ;gBAAC;gBAAU;aAAQ;YAC3BC,SAAS;gBAAC;aAAS;QACrB;IACF,CAAA;AAEO,MAAMZ,qBAAqB,IAAIa,IAAI;IAAC;IAAgB;IAAa;CAAY"}
@@ -0,0 +1,42 @@
1
+ /*
2
+ * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
+ * This file is part of Sync-in | The open source file sync and share solution
4
+ * See the LICENSE file for licensing details
5
+ */ "use strict";
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ Object.defineProperty(exports, "loadVersion", {
10
+ enumerable: true,
11
+ get: function() {
12
+ return loadVersion;
13
+ }
14
+ });
15
+ const _fs = require("fs");
16
+ const _nodepath = require("node:path");
17
+ const _configconstants = require("./configuration/config.constants");
18
+ function loadVersion() {
19
+ let version;
20
+ const currentDir = (0, _nodepath.resolve)((0, _nodepath.join)(__dirname, _configconstants.IS_TEST_ENV ? '../../' : '.'));
21
+ const packageJson = 'package.json';
22
+ const candidatePaths = [
23
+ (0, _nodepath.join)(currentDir, `./${packageJson}`),
24
+ (0, _nodepath.join)(currentDir, `../${packageJson}`),
25
+ (0, _nodepath.join)(currentDir, `../../${packageJson}`)
26
+ ];
27
+ for (const p of candidatePaths){
28
+ if (!(0, _fs.existsSync)(p)) continue;
29
+ try {
30
+ version = JSON.parse((0, _fs.readFileSync)(p, 'utf8')).version;
31
+ break;
32
+ } catch (e) {
33
+ console.error(`unable to load version from: ${p} - ${e}`);
34
+ }
35
+ }
36
+ if (!version) {
37
+ throw new Error('Application version not found (package.json not readable on known paths)');
38
+ }
39
+ return version;
40
+ }
41
+
42
+ //# sourceMappingURL=app.functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../backend/src/app.functions.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { existsSync, readFileSync } from 'fs'\nimport { join, resolve } from 'node:path'\nimport { IS_TEST_ENV } from './configuration/config.constants'\n\nexport function loadVersion(): string {\n let version: string | undefined\n const currentDir = resolve(join(__dirname, IS_TEST_ENV ? '../../' : '.'))\n const packageJson = 'package.json'\n const candidatePaths = [join(currentDir, `./${packageJson}`), join(currentDir, `../${packageJson}`), join(currentDir, `../../${packageJson}`)]\n\n for (const p of candidatePaths) {\n if (!existsSync(p)) continue\n try {\n version = JSON.parse(readFileSync(p, 'utf8')).version\n break\n } catch (e) {\n console.error(`unable to load version from: ${p} - ${e}`)\n }\n }\n\n if (!version) {\n throw new Error('Application version not found (package.json not readable on known paths)')\n }\n\n return version\n}\n"],"names":["loadVersion","version","currentDir","resolve","join","__dirname","IS_TEST_ENV","packageJson","candidatePaths","p","existsSync","JSON","parse","readFileSync","e","console","error","Error"],"mappings":"AAAA;;;;CAIC;;;;+BAMeA;;;eAAAA;;;oBAJyB;0BACX;iCACF;AAErB,SAASA;IACd,IAAIC;IACJ,MAAMC,aAAaC,IAAAA,iBAAO,EAACC,IAAAA,cAAI,EAACC,WAAWC,4BAAW,GAAG,WAAW;IACpE,MAAMC,cAAc;IACpB,MAAMC,iBAAiB;QAACJ,IAAAA,cAAI,EAACF,YAAY,CAAC,EAAE,EAAEK,aAAa;QAAGH,IAAAA,cAAI,EAACF,YAAY,CAAC,GAAG,EAAEK,aAAa;QAAGH,IAAAA,cAAI,EAACF,YAAY,CAAC,MAAM,EAAEK,aAAa;KAAE;IAE9I,KAAK,MAAME,KAAKD,eAAgB;QAC9B,IAAI,CAACE,IAAAA,cAAU,EAACD,IAAI;QACpB,IAAI;YACFR,UAAUU,KAAKC,KAAK,CAACC,IAAAA,gBAAY,EAACJ,GAAG,SAASR,OAAO;YACrD;QACF,EAAE,OAAOa,GAAG;YACVC,QAAQC,KAAK,CAAC,CAAC,6BAA6B,EAAEP,EAAE,GAAG,EAAEK,GAAG;QAC1D;IACF;IAEA,IAAI,CAACb,SAAS;QACZ,MAAM,IAAIgB,MAAM;IAClB;IAEA,OAAOhB;AACT"}
@@ -16,6 +16,7 @@ const _axios = require("@nestjs/axios");
16
16
  const _common = require("@nestjs/common");
17
17
  const _config = require("@nestjs/config");
18
18
  const _nestjspino = require("nestjs-pino");
19
+ const _appconstants = require("./app.constants");
19
20
  const _appservice = require("./app.service");
20
21
  const _applicationsmodule = require("./applications/applications.module");
21
22
  const _authmodule = require("./authentication/auth.module");
@@ -59,6 +60,9 @@ AppModule = _ts_decorate([
59
60
  _applicationsmodule.ApplicationsModule,
60
61
  _axios.HttpModule.register({
61
62
  global: true,
63
+ headers: {
64
+ 'User-Agent': _appconstants.USER_AGENT
65
+ },
62
66
  timeout: 5000,
63
67
  maxRedirects: 5
64
68
  })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../backend/src/app.module.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpModule } from '@nestjs/axios'\nimport { Module } from '@nestjs/common'\nimport { ConfigModule } from '@nestjs/config'\nimport { LoggerModule } from 'nestjs-pino'\nimport { AppService } from './app.service'\nimport { ApplicationsModule } from './applications/applications.module'\nimport { AuthModule } from './authentication/auth.module'\nimport { configuration, exportConfiguration } from './configuration/config.environment'\nimport { configLogger } from './configuration/config.logger'\nimport { CacheModule } from './infrastructure/cache/cache.module'\nimport { ContextModule } from './infrastructure/context/context.module'\nimport { DatabaseModule } from './infrastructure/database/database.module'\nimport { MailerModule } from './infrastructure/mailer/mailer.module'\nimport { SchedulerModule } from './infrastructure/scheduler/scheduler.module'\n\n@Module({\n imports: [\n ConfigModule.forRoot({ load: [exportConfiguration], validatePredefined: false, ignoreEnvFile: true, isGlobal: true }),\n LoggerModule.forRootAsync({\n useFactory: async () => ({\n pinoHttp: configLogger(configuration.logger)\n })\n }),\n AuthModule,\n DatabaseModule,\n CacheModule,\n MailerModule,\n ContextModule,\n SchedulerModule.register(),\n ApplicationsModule,\n HttpModule.register({\n global: true,\n timeout: 5000,\n maxRedirects: 5\n })\n ],\n providers: [AppService]\n})\nexport class AppModule {}\n"],"names":["AppModule","imports","ConfigModule","forRoot","load","exportConfiguration","validatePredefined","ignoreEnvFile","isGlobal","LoggerModule","forRootAsync","useFactory","pinoHttp","configLogger","configuration","logger","AuthModule","DatabaseModule","CacheModule","MailerModule","ContextModule","SchedulerModule","register","ApplicationsModule","HttpModule","global","timeout","maxRedirects","providers","AppService"],"mappings":"AAAA;;;;CAIC;;;;+BAwCYA;;;eAAAA;;;uBAtCc;wBACJ;wBACM;4BACA;4BACF;oCACQ;4BACR;mCACwB;8BACtB;6BACD;+BACE;gCACC;8BACF;iCACG;;;;;;;AAyBzB,IAAA,AAAMA,YAAN,MAAMA;AAAW;;;QAtBtBC,SAAS;YACPC,oBAAY,CAACC,OAAO,CAAC;gBAAEC,MAAM;oBAACC,sCAAmB;iBAAC;gBAAEC,oBAAoB;gBAAOC,eAAe;gBAAMC,UAAU;YAAK;YACnHC,wBAAY,CAACC,YAAY,CAAC;gBACxBC,YAAY,UAAa,CAAA;wBACvBC,UAAUC,IAAAA,0BAAY,EAACC,gCAAa,CAACC,MAAM;oBAC7C,CAAA;YACF;YACAC,sBAAU;YACVC,8BAAc;YACdC,wBAAW;YACXC,0BAAY;YACZC,4BAAa;YACbC,gCAAe,CAACC,QAAQ;YACxBC,sCAAkB;YAClBC,iBAAU,CAACF,QAAQ,CAAC;gBAClBG,QAAQ;gBACRC,SAAS;gBACTC,cAAc;YAChB;SACD;QACDC,WAAW;YAACC,sBAAU;SAAC"}
1
+ {"version":3,"sources":["../../backend/src/app.module.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpModule } from '@nestjs/axios'\nimport { Module } from '@nestjs/common'\nimport { ConfigModule } from '@nestjs/config'\nimport { LoggerModule } from 'nestjs-pino'\nimport { USER_AGENT } from './app.constants'\nimport { AppService } from './app.service'\nimport { ApplicationsModule } from './applications/applications.module'\nimport { AuthModule } from './authentication/auth.module'\nimport { configuration, exportConfiguration } from './configuration/config.environment'\nimport { configLogger } from './configuration/config.logger'\nimport { CacheModule } from './infrastructure/cache/cache.module'\nimport { ContextModule } from './infrastructure/context/context.module'\nimport { DatabaseModule } from './infrastructure/database/database.module'\nimport { MailerModule } from './infrastructure/mailer/mailer.module'\nimport { SchedulerModule } from './infrastructure/scheduler/scheduler.module'\n\n@Module({\n imports: [\n ConfigModule.forRoot({ load: [exportConfiguration], validatePredefined: false, ignoreEnvFile: true, isGlobal: true }),\n LoggerModule.forRootAsync({\n useFactory: async () => ({\n pinoHttp: configLogger(configuration.logger)\n })\n }),\n AuthModule,\n DatabaseModule,\n CacheModule,\n MailerModule,\n ContextModule,\n SchedulerModule.register(),\n ApplicationsModule,\n HttpModule.register({\n global: true,\n headers: {\n 'User-Agent': USER_AGENT\n },\n timeout: 5000,\n maxRedirects: 5\n })\n ],\n providers: [AppService]\n})\nexport class AppModule {}\n"],"names":["AppModule","imports","ConfigModule","forRoot","load","exportConfiguration","validatePredefined","ignoreEnvFile","isGlobal","LoggerModule","forRootAsync","useFactory","pinoHttp","configLogger","configuration","logger","AuthModule","DatabaseModule","CacheModule","MailerModule","ContextModule","SchedulerModule","register","ApplicationsModule","HttpModule","global","headers","USER_AGENT","timeout","maxRedirects","providers","AppService"],"mappings":"AAAA;;;;CAIC;;;;+BA4CYA;;;eAAAA;;;uBA1Cc;wBACJ;wBACM;4BACA;8BACF;4BACA;oCACQ;4BACR;mCACwB;8BACtB;6BACD;+BACE;gCACC;8BACF;iCACG;;;;;;;AA4BzB,IAAA,AAAMA,YAAN,MAAMA;AAAW;;;QAzBtBC,SAAS;YACPC,oBAAY,CAACC,OAAO,CAAC;gBAAEC,MAAM;oBAACC,sCAAmB;iBAAC;gBAAEC,oBAAoB;gBAAOC,eAAe;gBAAMC,UAAU;YAAK;YACnHC,wBAAY,CAACC,YAAY,CAAC;gBACxBC,YAAY,UAAa,CAAA;wBACvBC,UAAUC,IAAAA,0BAAY,EAACC,gCAAa,CAACC,MAAM;oBAC7C,CAAA;YACF;YACAC,sBAAU;YACVC,8BAAc;YACdC,wBAAW;YACXC,0BAAY;YACZC,4BAAa;YACbC,gCAAe,CAACC,QAAQ;YACxBC,sCAAkB;YAClBC,iBAAU,CAACF,QAAQ,CAAC;gBAClBG,QAAQ;gBACRC,SAAS;oBACP,cAAcC,wBAAU;gBAC1B;gBACAC,SAAS;gBACTC,cAAc;YAChB;SACD;QACDC,WAAW;YAACC,sBAAU;SAAC"}
@@ -13,6 +13,8 @@ Object.defineProperty(exports, "AdminModule", {
13
13
  }
14
14
  });
15
15
  const _common = require("@nestjs/common");
16
+ const _adminschedulerservice = require("./services/admin-scheduler.service");
17
+ const _adminservice = require("./services/admin.service");
16
18
  function _ts_decorate(decorators, target, key, desc) {
17
19
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
18
20
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -24,7 +26,10 @@ let AdminModule = class AdminModule {
24
26
  AdminModule = _ts_decorate([
25
27
  (0, _common.Module)({
26
28
  controllers: [],
27
- providers: []
29
+ providers: [
30
+ _adminservice.AdminService,
31
+ _adminschedulerservice.AdminSchedulerService
32
+ ]
28
33
  })
29
34
  ], AdminModule);
30
35
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/admin/admin.module.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Module } from '@nestjs/common'\n\n@Module({\n controllers: [],\n providers: []\n})\nexport class AdminModule {}\n"],"names":["AdminModule","controllers","providers"],"mappings":"AAAA;;;;CAIC;;;;+BAQYA;;;eAAAA;;;wBANU;;;;;;;AAMhB,IAAA,AAAMA,cAAN,MAAMA;AAAa;;;QAHxBC,aAAa,EAAE;QACfC,WAAW,EAAE"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/admin/admin.module.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Module } from '@nestjs/common'\nimport { AdminSchedulerService } from './services/admin-scheduler.service'\nimport { AdminService } from './services/admin.service'\n\n@Module({\n controllers: [],\n providers: [AdminService, AdminSchedulerService]\n})\nexport class AdminModule {}\n"],"names":["AdminModule","controllers","providers","AdminService","AdminSchedulerService"],"mappings":"AAAA;;;;CAIC;;;;+BAUYA;;;eAAAA;;;wBARU;uCACe;8BACT;;;;;;;AAMtB,IAAA,AAAMA,cAAN,MAAMA;AAAa;;;QAHxBC,aAAa,EAAE;QACfC,WAAW;YAACC,0BAAY;YAAEC,4CAAqB;SAAC"}
@@ -7,4 +7,4 @@ Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
9
 
10
- //# sourceMappingURL=user-mail-notification.js.map
10
+ //# sourceMappingURL=check-update.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../backend/src/applications/admin/interfaces/check-update.interfaces.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nexport interface ServerReleaseVersionManifest {\n // tag_name: `v1.0.0`\n tag_name: string\n}\n\nexport interface ServerReleaseNotification {\n version: string\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
@@ -0,0 +1,53 @@
1
+ /*
2
+ * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
+ * This file is part of Sync-in | The open source file sync and share solution
4
+ * See the LICENSE file for licensing details
5
+ */ "use strict";
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ Object.defineProperty(exports, "AdminSchedulerService", {
10
+ enumerable: true,
11
+ get: function() {
12
+ return AdminSchedulerService;
13
+ }
14
+ });
15
+ const _common = require("@nestjs/common");
16
+ const _schedule = require("@nestjs/schedule");
17
+ const _promises = require("node:timers/promises");
18
+ const _adminservice = require("./admin.service");
19
+ function _ts_decorate(decorators, target, key, desc) {
20
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
21
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
22
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
23
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
24
+ }
25
+ function _ts_metadata(k, v) {
26
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
27
+ }
28
+ let AdminSchedulerService = class AdminSchedulerService {
29
+ async checkServerUpdateAndNotify() {
30
+ // Apply a random delay so instances don't trigger the check simultaneously
31
+ const randomDelay = Math.floor(Math.random() * 900 * 1000);
32
+ await (0, _promises.setTimeout)(randomDelay);
33
+ await this.adminService.checkServerUpdateAndNotify();
34
+ }
35
+ constructor(adminService){
36
+ this.adminService = adminService;
37
+ }
38
+ };
39
+ _ts_decorate([
40
+ (0, _schedule.Cron)(_schedule.CronExpression.EVERY_DAY_AT_9AM),
41
+ _ts_metadata("design:type", Function),
42
+ _ts_metadata("design:paramtypes", []),
43
+ _ts_metadata("design:returntype", Promise)
44
+ ], AdminSchedulerService.prototype, "checkServerUpdateAndNotify", null);
45
+ AdminSchedulerService = _ts_decorate([
46
+ (0, _common.Injectable)(),
47
+ _ts_metadata("design:type", Function),
48
+ _ts_metadata("design:paramtypes", [
49
+ typeof _adminservice.AdminService === "undefined" ? Object : _adminservice.AdminService
50
+ ])
51
+ ], AdminSchedulerService);
52
+
53
+ //# sourceMappingURL=admin-scheduler.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../backend/src/applications/admin/services/admin-scheduler.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Injectable } from '@nestjs/common'\nimport { Cron, CronExpression } from '@nestjs/schedule'\nimport { setTimeout } from 'node:timers/promises'\nimport { AdminService } from './admin.service'\n\n@Injectable()\nexport class AdminSchedulerService {\n constructor(private readonly adminService: AdminService) {}\n\n @Cron(CronExpression.EVERY_DAY_AT_9AM)\n async checkServerUpdateAndNotify() {\n // Apply a random delay so instances don't trigger the check simultaneously\n const randomDelay = Math.floor(Math.random() * 900 * 1000)\n await setTimeout(randomDelay)\n await this.adminService.checkServerUpdateAndNotify()\n }\n}\n"],"names":["AdminSchedulerService","checkServerUpdateAndNotify","randomDelay","Math","floor","random","setTimeout","adminService","EVERY_DAY_AT_9AM"],"mappings":"AAAA;;;;CAIC;;;;+BAQYA;;;eAAAA;;;wBANc;0BACU;0BACV;8BACE;;;;;;;;;;AAGtB,IAAA,AAAMA,wBAAN,MAAMA;IAGX,MACMC,6BAA6B;QACjC,2EAA2E;QAC3E,MAAMC,cAAcC,KAAKC,KAAK,CAACD,KAAKE,MAAM,KAAK,MAAM;QACrD,MAAMC,IAAAA,oBAAU,EAACJ;QACjB,MAAM,IAAI,CAACK,YAAY,CAACN,0BAA0B;IACpD;IARA,YAAY,AAAiBM,YAA0B,CAAE;aAA5BA,eAAAA;IAA6B;AAS5D;;iDAPuBC"}
@@ -0,0 +1,102 @@
1
+ /*
2
+ * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
+ * This file is part of Sync-in | The open source file sync and share solution
4
+ * See the LICENSE file for licensing details
5
+ */ "use strict";
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ Object.defineProperty(exports, "AdminService", {
10
+ enumerable: true,
11
+ get: function() {
12
+ return AdminService;
13
+ }
14
+ });
15
+ const _axios = require("@nestjs/axios");
16
+ const _common = require("@nestjs/common");
17
+ const _appconstants = require("../../../app.constants");
18
+ const _shared = require("../../../common/shared");
19
+ const _cacheservice = require("../../../infrastructure/cache/services/cache.service");
20
+ const _applicationsconstants = require("../../applications.constants");
21
+ const _notifications = require("../../notifications/constants/notifications");
22
+ const _notificationsmanagerservice = require("../../notifications/services/notifications-manager.service");
23
+ const _adminusersqueriesservice = require("../../users/services/admin-users-queries.service");
24
+ const _checkupdate = require("../utils/check-update");
25
+ function _ts_decorate(decorators, target, key, desc) {
26
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
28
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
29
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
30
+ }
31
+ function _ts_metadata(k, v) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
+ }
34
+ let AdminService = class AdminService {
35
+ async checkServerUpdateAndNotify() {
36
+ let lastVersion;
37
+ try {
38
+ const res = await this.http.axiosRef({
39
+ method: _applicationsconstants.HTTP_METHOD.GET,
40
+ url: _shared.APP_URL.SERVER_VERSION_MANIFEST
41
+ });
42
+ lastVersion = res.data?.tag_name || '';
43
+ } catch (e) {
44
+ this.logger.warn(`${this.checkServerUpdateAndNotify.name} - unable to check update: ${e}`);
45
+ return;
46
+ }
47
+ if (!lastVersion.startsWith('v')) {
48
+ this.logger.warn(`${this.checkServerUpdateAndNotify.name} - unable to check version: ${lastVersion}`);
49
+ return;
50
+ }
51
+ lastVersion = lastVersion.slice(1); // remove 'v' to compare with the current version
52
+ if (!(0, _checkupdate.isServerUpdateAvailable)(_appconstants.VERSION, lastVersion)) {
53
+ return;
54
+ }
55
+ // Get the last version that was notified to administrators
56
+ const notifiedVersion = await this.cache.get(this.checkServerUpdateAndNotify.name);
57
+ if (!notifiedVersion?.version) {
58
+ // The version was never stored, do it
59
+ await this.cache.set(this.checkServerUpdateAndNotify.name, {
60
+ version: _appconstants.VERSION
61
+ }, 0);
62
+ return;
63
+ }
64
+ if (notifiedVersion.version === lastVersion) {
65
+ // Notification was already sent to administrators
66
+ return;
67
+ }
68
+ const adminsToNotify = await this.adminUsersQueries.listAdminsToNotify();
69
+ if (!adminsToNotify.length) {
70
+ return;
71
+ }
72
+ const notification = {
73
+ app: _notifications.NOTIFICATION_APP.UPDATE_AVAILABLE,
74
+ event: _notifications.NOTIFICATION_APP_EVENT.UPDATE_AVAILABLE,
75
+ element: lastVersion,
76
+ externalUrl: _shared.APP_URL.RELEASES,
77
+ url: null
78
+ };
79
+ this.notificationsManager.create(adminsToNotify, notification).then(()=>this.cache.set(this.checkServerUpdateAndNotify.name, {
80
+ version: lastVersion
81
+ }, 0)).catch((e)=>this.logger.error(`${this.checkServerUpdateAndNotify.name} - ${e}`));
82
+ }
83
+ constructor(http, cache, notificationsManager, adminUsersQueries){
84
+ this.http = http;
85
+ this.cache = cache;
86
+ this.notificationsManager = notificationsManager;
87
+ this.adminUsersQueries = adminUsersQueries;
88
+ this.logger = new _common.Logger(AdminService.name);
89
+ }
90
+ };
91
+ AdminService = _ts_decorate([
92
+ (0, _common.Injectable)(),
93
+ _ts_metadata("design:type", Function),
94
+ _ts_metadata("design:paramtypes", [
95
+ typeof _axios.HttpService === "undefined" ? Object : _axios.HttpService,
96
+ typeof _cacheservice.Cache === "undefined" ? Object : _cacheservice.Cache,
97
+ typeof _notificationsmanagerservice.NotificationsManager === "undefined" ? Object : _notificationsmanagerservice.NotificationsManager,
98
+ typeof _adminusersqueriesservice.AdminUsersQueries === "undefined" ? Object : _adminusersqueriesservice.AdminUsersQueries
99
+ ])
100
+ ], AdminService);
101
+
102
+ //# sourceMappingURL=admin.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../backend/src/applications/admin/services/admin.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpService } from '@nestjs/axios'\nimport { Injectable, Logger } from '@nestjs/common'\nimport type { AxiosResponse } from 'axios'\nimport { VERSION } from '../../../app.constants'\nimport { APP_URL } from '../../../common/shared'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { HTTP_METHOD } from '../../applications.constants'\nimport { NOTIFICATION_APP, NOTIFICATION_APP_EVENT } from '../../notifications/constants/notifications'\nimport { NotificationContent } from '../../notifications/interfaces/notification-properties.interface'\nimport type { UserMailNotification } from '../../notifications/interfaces/user-mail-notification.interface'\nimport { NotificationsManager } from '../../notifications/services/notifications-manager.service'\nimport { AdminUsersQueries } from '../../users/services/admin-users-queries.service'\nimport type { ServerReleaseNotification, ServerReleaseVersionManifest } from '../interfaces/check-update.interfaces'\nimport { isServerUpdateAvailable } from '../utils/check-update'\n\n@Injectable()\nexport class AdminService {\n private readonly logger = new Logger(AdminService.name)\n\n constructor(\n private readonly http: HttpService,\n private readonly cache: Cache,\n private readonly notificationsManager: NotificationsManager,\n private readonly adminUsersQueries: AdminUsersQueries\n ) {}\n\n async checkServerUpdateAndNotify() {\n let lastVersion: string\n try {\n const res: AxiosResponse<ServerReleaseVersionManifest> = await this.http.axiosRef({\n method: HTTP_METHOD.GET,\n url: APP_URL.SERVER_VERSION_MANIFEST\n })\n lastVersion = res.data?.tag_name || ''\n } catch (e) {\n this.logger.warn(`${this.checkServerUpdateAndNotify.name} - unable to check update: ${e}`)\n return\n }\n if (!lastVersion.startsWith('v')) {\n this.logger.warn(`${this.checkServerUpdateAndNotify.name} - unable to check version: ${lastVersion}`)\n return\n }\n lastVersion = lastVersion.slice(1) // remove 'v' to compare with the current version\n if (!isServerUpdateAvailable(VERSION, lastVersion)) {\n return\n }\n // Get the last version that was notified to administrators\n const notifiedVersion: ServerReleaseNotification = await this.cache.get(this.checkServerUpdateAndNotify.name)\n if (!notifiedVersion?.version) {\n // The version was never stored, do it\n await this.cache.set(this.checkServerUpdateAndNotify.name, { version: VERSION } satisfies ServerReleaseNotification, 0)\n return\n }\n if (notifiedVersion.version === lastVersion) {\n // Notification was already sent to administrators\n return\n }\n const adminsToNotify: UserMailNotification[] = await this.adminUsersQueries.listAdminsToNotify()\n if (!adminsToNotify.length) {\n return\n }\n const notification: NotificationContent = {\n app: NOTIFICATION_APP.UPDATE_AVAILABLE,\n event: NOTIFICATION_APP_EVENT.UPDATE_AVAILABLE,\n element: lastVersion,\n externalUrl: APP_URL.RELEASES,\n url: null\n }\n this.notificationsManager\n .create(adminsToNotify, notification)\n .then(() => this.cache.set(this.checkServerUpdateAndNotify.name, { version: lastVersion } satisfies ServerReleaseNotification, 0))\n .catch((e: Error) => this.logger.error(`${this.checkServerUpdateAndNotify.name} - ${e}`))\n }\n}\n"],"names":["AdminService","checkServerUpdateAndNotify","lastVersion","res","http","axiosRef","method","HTTP_METHOD","GET","url","APP_URL","SERVER_VERSION_MANIFEST","data","tag_name","e","logger","warn","name","startsWith","slice","isServerUpdateAvailable","VERSION","notifiedVersion","cache","get","version","set","adminsToNotify","adminUsersQueries","listAdminsToNotify","length","notification","app","NOTIFICATION_APP","UPDATE_AVAILABLE","event","NOTIFICATION_APP_EVENT","element","externalUrl","RELEASES","notificationsManager","create","then","catch","error","Logger"],"mappings":"AAAA;;;;CAIC;;;;+BAkBYA;;;eAAAA;;;uBAhBe;wBACO;8BAEX;wBACA;8BACF;uCACM;+BAC6B;6CAGpB;0CACH;6BAEM;;;;;;;;;;AAGjC,IAAA,AAAMA,eAAN,MAAMA;IAUX,MAAMC,6BAA6B;QACjC,IAAIC;QACJ,IAAI;YACF,MAAMC,MAAmD,MAAM,IAAI,CAACC,IAAI,CAACC,QAAQ,CAAC;gBAChFC,QAAQC,kCAAW,CAACC,GAAG;gBACvBC,KAAKC,eAAO,CAACC,uBAAuB;YACtC;YACAT,cAAcC,IAAIS,IAAI,EAAEC,YAAY;QACtC,EAAE,OAAOC,GAAG;YACV,IAAI,CAACC,MAAM,CAACC,IAAI,CAAC,GAAG,IAAI,CAACf,0BAA0B,CAACgB,IAAI,CAAC,2BAA2B,EAAEH,GAAG;YACzF;QACF;QACA,IAAI,CAACZ,YAAYgB,UAAU,CAAC,MAAM;YAChC,IAAI,CAACH,MAAM,CAACC,IAAI,CAAC,GAAG,IAAI,CAACf,0BAA0B,CAACgB,IAAI,CAAC,4BAA4B,EAAEf,aAAa;YACpG;QACF;QACAA,cAAcA,YAAYiB,KAAK,CAAC,IAAG,iDAAiD;QACpF,IAAI,CAACC,IAAAA,oCAAuB,EAACC,qBAAO,EAAEnB,cAAc;YAClD;QACF;QACA,2DAA2D;QAC3D,MAAMoB,kBAA6C,MAAM,IAAI,CAACC,KAAK,CAACC,GAAG,CAAC,IAAI,CAACvB,0BAA0B,CAACgB,IAAI;QAC5G,IAAI,CAACK,iBAAiBG,SAAS;YAC7B,sCAAsC;YACtC,MAAM,IAAI,CAACF,KAAK,CAACG,GAAG,CAAC,IAAI,CAACzB,0BAA0B,CAACgB,IAAI,EAAE;gBAAEQ,SAASJ,qBAAO;YAAC,GAAuC;YACrH;QACF;QACA,IAAIC,gBAAgBG,OAAO,KAAKvB,aAAa;YAC3C,kDAAkD;YAClD;QACF;QACA,MAAMyB,iBAAyC,MAAM,IAAI,CAACC,iBAAiB,CAACC,kBAAkB;QAC9F,IAAI,CAACF,eAAeG,MAAM,EAAE;YAC1B;QACF;QACA,MAAMC,eAAoC;YACxCC,KAAKC,+BAAgB,CAACC,gBAAgB;YACtCC,OAAOC,qCAAsB,CAACF,gBAAgB;YAC9CG,SAASnC;YACToC,aAAa5B,eAAO,CAAC6B,QAAQ;YAC7B9B,KAAK;QACP;QACA,IAAI,CAAC+B,oBAAoB,CACtBC,MAAM,CAACd,gBAAgBI,cACvBW,IAAI,CAAC,IAAM,IAAI,CAACnB,KAAK,CAACG,GAAG,CAAC,IAAI,CAACzB,0BAA0B,CAACgB,IAAI,EAAE;gBAAEQ,SAASvB;YAAY,GAAuC,IAC9HyC,KAAK,CAAC,CAAC7B,IAAa,IAAI,CAACC,MAAM,CAAC6B,KAAK,CAAC,GAAG,IAAI,CAAC3C,0BAA0B,CAACgB,IAAI,CAAC,GAAG,EAAEH,GAAG;IAC3F;IArDA,YACE,AAAiBV,IAAiB,EAClC,AAAiBmB,KAAY,EAC7B,AAAiBiB,oBAA0C,EAC3D,AAAiBZ,iBAAoC,CACrD;aAJiBxB,OAAAA;aACAmB,QAAAA;aACAiB,uBAAAA;aACAZ,oBAAAA;aANFb,SAAS,IAAI8B,cAAM,CAAC7C,aAAaiB,IAAI;IAOnD;AAiDL"}